package com.xcm.dao;

import com.github.pagehelper.Page;
import com.xcm.model.SysRole;
import com.xcm.model.RoleAuthority;
import com.xcm.model.UserRole;
import com.xcm.model.vo.SysRoleVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 角色持久层
 *
 * @author linqiang
 * @date 2018-04-13 9:15
 */
public interface SysRoleMapper extends BaseMapper<SysRole> {

    /**
     * 列表分页
     *
     * @param paramMap 参数
     * @return
     */
    Page<SysRole> listPage(Map<String, Object> paramMap);

    /**
     * 查询集合
     *
     * @param paramMap 参数
     * @return
     */
    List<SysRole> list(Map<String, Object> paramMap);

    /**
     * 统计角色的关联条数（和用户，权限关联的条数之和）
     *
     * @param roleId 角色id
     * @return
     */
    int countRoleRelationWithAuthorityAndUser(@Param("roleId") Integer roleId);

    /**
     * 新增角色并返回影响行数
     *
     * @param sysRole
     * @return
     */
    int saveAndGetId(SysRole sysRole);

    /**
     * 根据id获取角色VO（包含关联的权限id）
     *
     * @param roleId
     * @return
     */
    SysRoleVo getByIdVo(@Param("roleId") Integer roleId);

    /**
     * 根据用户id查询角色集合
     *
     * @param userId
     * @return
     */
    List<SysRole> listByUserId(@Param("userId") Integer userId);

    /**
     * 批量停用或启用角色
     *
     * @param roleIdList 角色id集合
     * @param able       启用或停用(1启用，0停用)
     * @return
     */
    int batchEnableOrDisableRole(@Param("roleIdList") List<Integer> roleIdList, @Param("able") String able);

    /**
     * 根据权限id找到所属的角色
     *
     * @param authorityId 权限id
     * @return
     */
    List<SysRole> getRoleListBySystem(@Param("authorityId") Integer authorityId);
}
